//
//  WBUserAccount.swift
//  mySwiftVV
//
//  Created by hu yr on 2017/1/11.
//  Copyright © 2017年 terry. All rights reserved.
//

import UIKit


fileprivate let accountFile :NSString = "useraccount.json"


/// 用户账户信息
class WBUserAccount: NSObject {

    /// 访问令牌
    var access_token: String? //= "2.00l9SUaD0aZKw5826950c15eaLL1IB"
    
    /// 用户代号
    var uid : String?
    /// 过期日期 , 单位秒
    //开发者 5 年 每次登陆后,都是5年
    ///使用者 3天, 会从第一次登陆递减
    var expires_in : TimeInterval = 0{
        didSet{
            expiresDate = Date(timeIntervalSinceNow: expires_in)
        }
    }
    
    /// 过期日期
    var expiresDate: Date?
    
    /// 用户昵称
    var screen_name: String?
    
    /// 用户头像地址(大图), 180x180像素
    var avatar_large: String?
    
    
    override var description: String{
        
        return yy_modelDescription()
    }
    
    override init() {
        
         super.init()
        
        //从磁盘加载保存的文件 -> 字典
        //1.加载磁盘文件到二进制数据,如果失败直接返回
        guard let path = accountFile.cz_appendDocumentDir(),
            let data = NSData(contentsOfFile: path),
        let dict = try? JSONSerialization.jsonObject(with: data as Data, options: []) as? [String : AnyObject]
            else{
                
                return
        }
        
        //2.使用字典设置属性值
        /// ***用户是否登录的关键代码
        yy_modelSet(with: dict ?? [:])
        
//        print("从沙盒加载加载用户信息 \(self)")
        
        //3.判断token是否过期
        if expiresDate?.compare(Date()) != .orderedDescending{
            print("账户过期")
            
            //情况token
            access_token = nil;
            uid = nil;
            
            // 删除账户文件
            _ = try? FileManager.default.removeItem(atPath: path)
        }
//        print("账户正常 \(self)")
    }
    
    
    /**
     1.偏好设置(小)
     2.沙盒 -归档/plist/json
     3.数据库(FMDB/CoreDat)
     4.钥匙串访问(小/自动加密 - 需要使用框架 SSKeyChain)
     
     */
    func saveAccount(){
        
        //1.模型转字典
        var dict = (self.yy_modelToJSONObject() as? [String : AnyObject]) ?? [:]
        //需要删除 expire_in 值
        dict.removeValue(forKey: "expires_in")
        //2.字典序列化
        guard let data = try? JSONSerialization.data(withJSONObject: dict, options: []),let filePath = accountFile.cz_appendDocumentDir()
        else{
            return
            
        }
        
        //3.写入磁盘
        (data as NSData).write(toFile: filePath, atomically: true)
        
        print("用户账户保存成功 \(filePath)")
        
        
        
        
        
        
        
        
        
    }
}
